  // sort
  var sortPanel = document.querySelector('.sortPanel');

  // get all sortIds
    var sortIds = sortPanel.querySelectorAll('li');
    function foo(){
      var hash = {}, sortId, sort, reg = /\bby\w+\b/i;
      for (var i = sortIds.length - 1; i >= 0; i--) {
          if(sortIds[i].hasCls('allDefault'))continue; 
          sortId = sortIds[i].className;
          sortId = sortId.match(reg) || [];
          sortId = sortId[0];

          sort = sortIds[i].className.replace(sortId, '');
          sort = sort.trim();
          if(sort != 'default')hash[sortId] = sort;
      };
      
      return hash;
    }

    function toURL(hash){
      var str = [];
      for(var i in hash)
        str.push(i + '=' + hash[i]);
      return str.join('&');
    }
  sortPanel.onClk(function(e){
    var el = e.target;
    if(el.hasCls('default')){
        el.removeCls('default');
        el.addCls('desc');
    }else if(el.hasCls('desc')){
        el.removeCls('desc');
        el.addCls('asc'); 
    }else if(el.hasCls('asc')){
        el.removeCls('asc');
        el.addCls('default'); 
    }

    var hash = foo();
    location.hash = toURL(hash);
    console.log(hash);
  });
		/*
			下面代码效果一样，只是通过隐藏方式 highlight，而如果使用 initSelect() 方式则是全部清除掉再
	        for(var i = 0, j = sNodes.length; i < j; i++){ // 本级突出选中项显示
	        	sNode = sNodes[i];
	        	if(sNode == span){
	        		// highlight it!
	            	span.innerHTML += "Χ";
            		// 不是最后一级，仅列出选中的
            		span.onclick = function(e){
	       				var data = levelIndex == 0 ? ChinaData
	       					: JSON.Path.getNode("/" + this.selectData[levelIndex - 1]).sub;
            			reset.call(this, data, levelIndex);

						if (e && e.stopPropagation)
							e.stopPropagation(); 
						else
							window.event.cancelBubble = true;
						return false;
            		}.bind(this);
	        	}else{
	        		sNode.addCls('hide');// 隐藏兄弟节点
	        	}
	        }
	        */




// <pre class="code"><span class="comment">// JavaScript doesn't include a native reverse method for strings,
// // so we need to create one</span>
// String.prototype.reverse = function() {
// 	return this.split("").reverse().join("");
// };
// <span class="comment">// Mimic the regex /^[\S\s]{1,100}(?:(?&lt;=&lt;[^&gt;]*)[^&gt;]*&gt;)?/ through
// // node-by-node reversal</span>
// var regex = /(?:&gt;[^&gt;]*(?=[^&gt;]*&lt;))?[\S\s]{1,100}$/;
// var output = input.reverse().match(regex)[0].reverse();
// </pre>

	// $.post('http://fx.51704.com/api/top.jsp', 
	// 	function(xml){alert(xml)}, 
	// 	{
	// 		custId:'405123222', 
	// 		// tagIds:60018,
	// 		apikey:'E6369722CD4B708B4F6A841DBFF372CF'
	// 		// keyWrod : '杭州印象西湖'
	// 	}
	// );